<?php
/**
 * TOP API: taobao.item.update request
 * 
 * @author auto create
 * @since 1.0, 2012-04-17 12:36:56
 */
class ItemUpdateRequest
{
    /** 
     * 售后服务说明模板id
     **/
    private $afterSaleId;
    
    /** 
     * 商品上传后的状态。可选值:onsale（出售中）,instock（库中），如果同时更新商品状态为出售中及list_time为将来的时间，则商品还是处于定时上架的状态, 此时item.is_timing为true
     **/
    private $approveStatus;
    
    /** 
     * 商品的积分返点比例。如：5 表示返点比例0.5%. 注意：返点比例必须是>0的整数，而且最大是90,即为9%.B商家在发布非虚拟商品时，返点必须是 5的倍数，即0.5%的倍数。其它是1的倍数，即0.1%的倍数。无名良品商家发布商品时，复用该字段记录积分宝返点比例，返点必须是对应类目的返点步长的整数倍，默认是5，即0.5%。注意此时该字段值依旧必须是>0的整数，注意此时该字段值依旧必须是>0的整数，最高值不超过500，即50%
     **/
    private $auctionPoint;
    
    /** 
     * 代充商品类型。只有少数类目下的商品可以标记上此字段，具体哪些类目可以上传可以通过taobao.itemcat.features.get获得。在代充商品的类目下，不传表示不标记商品类型（交易搜索中就不能通过标记搜到相关的交易了）。可选类型： 
no_mark(不做类型标记) 
time_card(点卡软件代充) 
fee_card(话费软件代充)
     **/
    private $autoFill;
    
    /** 
     * 叶子类目id
     **/
    private $cid;
    
    /** 
     * 货到付款运费模板ID
     **/
    private $codPostageId;
    
    /** 
     * 商品描述. 字数要大于5个字符，小于25000个字符 ，受违禁词控制
     **/
    private $desc;
    
    /** 
     * ems费用。取值范围:0.01-999.00;精确到2位小数;单位:元。如:25.07，表示:25元7分
     **/
    private $emsFee;
    
    /** 
     * 快递费用。取值范围:0.01-999.00;精确到2位小数;单位:元。如:15.07，表示:15元7分
     **/
    private $expressFee;
    
    /** 
     * 运费承担方式。运费承担方式。可选值:seller（卖家承担）,buyer(买家承担);
     **/
    private $freightPayer;
    
    /** 
     * 支持会员打折。可选值:true,false;
     **/
    private $hasDiscount;
    
    /** 
     * 是否有发票。可选值:true,false (商城卖家此字段必须为true)
     **/
    private $hasInvoice;
    
    /** 
     * 橱窗推荐。可选值:true,false;
     **/
    private $hasShowcase;
    
    /** 
     * 是否有保修。可选值:true,false;
     **/
    private $hasWarranty;
    
    /** 
     * 商品图片。类型:JPG,GIF;最大长度:500k
     **/
    private $image;
    
    /** 
     * 加价幅度 如果为0，代表系统代理幅度
     **/
    private $increment;
    
    /** 
     * 用户自行输入的类目属性ID串，结构："pid1,pid2,pid3"，如："20000"（表示品牌） 注：通常一个类目下用户可输入的关键属性不超过1个。
     **/
    private $inputPids;
    
    /** 
     * 用户自行输入的子属性名和属性值，结构:"父属性值;一级子属性名;一级子属性值;二级子属性名;自定义输入值,....",如：“耐克;耐克系列;科比系列;科比系列;2K5,Nike乔丹鞋;乔丹系列;乔丹鞋系列;乔丹鞋系列;json5”，多个自定义属性用','分割，input_str需要与input_pids一一对应，注：通常一个类目下用户可输入的关键属性不超过1个。所有属性别名加起来不能超过3999字节。此处不可以使用“其他”、“其它”和“其她”这三个词。
     **/
    private $inputStr;
    
    /** 
     * 是否是3D
     **/
    private $is3D;
    
    /** 
     * 是否在外店显示
     **/
    private $isEx;
    
    /** 
     * 实物闪电发货。注意：在售的闪电发货产品不允许取消闪电发货，需要先下架商品才能取消闪电发货标记
     **/
    private $isLightningConsignment;
    
    /** 
     * 是否替换sku
     **/
    private $isReplaceSku;
    
    /** 
     * 是否在淘宝上显示
     **/
    private $isTaobao;
    
    /** 
     * 商品是否为新品。只有在当前类目开通新品,并且当前用户拥有该类目下发布新品权限时才能设置is_xinpin为true，否则设置true后会返回错误码:isv.invalid-permission:xinpin。同时只有一口价全新的宝贝才能设置为新品，否则会返回错误码：isv.invalid-parameter:xinpin。不设置参数就保持原有值。
     **/
    private $isXinpin;
    
    /** 
     * 商品文字的版本，繁体传入”zh_HK”，简体传入”zh_CN”
     **/
    private $lang;
    
    /** 
     * 上架时间。不论是更新架下的商品还是出售中的商品，如果这个字段小于当前时间则直接上架商品，并且上架的时间为更新商品的时间，此时item.is_timing为false，如果大于当前时间则宝贝会下架进入定时上架的宝贝中。
     **/
    private $listTime;
    
    /** 
     * 所在地城市。如杭州 具体可以下载http://dl.open.taobao.com/sdk/商品城市列表.rar 取到
     **/
    private $locationCity;
    
    /** 
     * 所在地省份。如浙江 具体可以下载http://dl.open.taobao.com/sdk/商品城市列表.rar 取到
     **/
    private $locationState;
    
    /** 
     * 商品数量，取值范围:0-999999的整数。且需要等于Sku所有数量的和
     **/
    private $num;
    
    /** 
     * 商品数字ID，该参数必须
     **/
    private $numIid;
    
    /** 
     * 商家编码
     **/
    private $outerId;
    
    /** 
     * 商品主图需要关联的图片空间的相对url。这个url所对应的图片必须要属于当前用户。pic_path和image只需要传入一个,如果两个都传，默认选择pic_path
     **/
    private $picPath;
    
    /** 
     * 平邮费用。取值范围:0.01-999.00;精确到2位小数;单位:元。如:5.07，表示:5元7分, 注:post_fee,express_fee,ems_fee需一起填写
     **/
    private $postFee;
    
    /** 
     * 宝贝所属的运费模板ID。取值范围：整数且必须是该卖家的运费模板的ID（可通过taobao.postages.get获得当前会话用户的所有邮费模板）
     **/
    private $postageId;
    
    /** 
     * 商品价格。取值范围:0-100000000;精确到2位小数;单位:元。如:200.07，表示:200元7分。需要在正确的价格区间内。
     **/
    private $price;
    
    /** 
     * 商品所属的产品ID(B商家发布商品需要用)
     **/
    private $productId;
    
    /** 
     * 属性值别名。如pid:vid:别名;pid1:vid1:别名1， pid:属性id vid:值id。总长度不超过512字节
     **/
    private $propertyAlias;
    
    /** 
     * 商品属性列表。格式:pid:vid;pid:vid。属性的pid调用taobao.itemprops.get取得，属性值的vid用taobao.itempropvalues.get取得vid。 如果该类目下面没有属性，可以不用填写。如果有属性，必选属性必填，其他非必选属性可以选择不填写.属性不能超过35对。所有属性加起来包括分割符不能超过549字节，单个属性没有限制。 如果有属性是可输入的话，则用字段input_str填入属性的值。
     **/
    private $props;
    
    /** 
     * 是否承诺退换货服务!虚拟商品无须设置此项!
     **/
    private $sellPromise;
    
    /** 
     * 重新关联商品与店铺类目，结构:",cid1,cid2,...,"，如果店铺类目存在二级类目，必须传入子类目cids。
     **/
    private $sellerCids;
    
    /** 
     * Sku的外部id串，结构如：1234,1342,… sku_properties, sku_quantities, sku_prices, sku_outer_ids在输入数据时要一一对应，如果没有sku_outer_ids也要写上这个参数，入参是","(这个是两个sku的示列，逗号数应该是sku个数减1)；该参数最大长度是512个字节
     **/
    private $skuOuterIds;
    
    /** 
     * 更新的Sku的价格串，结构如：10.00,5.00,… 精确到2位小数;单位:元。如:200.07，表示:200元7分
     **/
    private $skuPrices;
    
    /** 
     * 更新的Sku的属性串，调用taobao.itemprops.get获取类目属性，如果属性是销售属性，再用taobao.itempropvalues.get取得vid。格式:pid:vid;pid:vid,多个sku之间用逗号分隔。该字段内的销售属性(自定义的除外)也需要在props字段填写 . 规则：如果该SKU存在旧商品，则修改；否则新增Sku。如果更新时有对Sku进行操作，则Sku的properties一定要传入。如果存在自定义销售属性，则格式为pid:vid;pid2:vid2;$pText:vText，其中$pText:vText为自定义属性。限制：其中$pText的’$’前缀不能少，且pText和vText文本中不可以存在 冒号:和分号;以及逗号
     **/
    private $skuProperties;
    
    /** 
     * 更新的Sku的数量串，结构如：num1,num2,num3 如:2,3,4
     **/
    private $skuQuantities;
    
    /** 
     * 商品新旧程度。可选值:new（全新）,unused（闲置）,second（二手）。
     **/
    private $stuffStatus;
    
    /** 
     * 商品是否支持拍下减库存:1支持;2取消支持(付款减库存);0(默认)不更改
集市卖家默认拍下减库存;
商城卖家默认付款减库存
     **/
    private $subStock;
    
    /** 
     * 宝贝标题. 不能超过60字符,受违禁词控制
     **/
    private $title;
    
    /** 
     * 有效期。可选值:7,14;单位:天;
     **/
    private $validThru;
    
    /** 
     * 商品的重量(商超卖家专用字段)
     **/
    private $weight;
    
    private $apiParas = array();
    
    public function setAfterSaleId($afterSaleId)
    {
        $this->afterSaleId = $afterSaleId;
        $this->apiParas["after_sale_id"] = $afterSaleId;
    }

    public function getAfterSaleId()
    {
        return $this->afterSaleId;
    }

    public function setApproveStatus($approveStatus)
    {
        $this->approveStatus = $approveStatus;
        $this->apiParas["approve_status"] = $approveStatus;
    }

    public function getApproveStatus()
    {
        return $this->approveStatus;
    }

    public function setAuctionPoint($auctionPoint)
    {
        $this->auctionPoint = $auctionPoint;
        $this->apiParas["auction_point"] = $auctionPoint;
    }

    public function getAuctionPoint()
    {
        return $this->auctionPoint;
    }

    public function setAutoFill($autoFill)
    {
        $this->autoFill = $autoFill;
        $this->apiParas["auto_fill"] = $autoFill;
    }

    public function getAutoFill()
    {
        return $this->autoFill;
    }

    public function setCid($cid)
    {
        $this->cid = $cid;
        $this->apiParas["cid"] = $cid;
    }

    public function getCid()
    {
        return $this->cid;
    }

    public function setCodPostageId($codPostageId)
    {
        $this->codPostageId = $codPostageId;
        $this->apiParas["cod_postage_id"] = $codPostageId;
    }

    public function getCodPostageId()
    {
        return $this->codPostageId;
    }

    public function setDesc($desc)
    {
        $this->desc = $desc;
        $this->apiParas["desc"] = $desc;
    }

    public function getDesc()
    {
        return $this->desc;
    }

    public function setEmsFee($emsFee)
    {
        $this->emsFee = $emsFee;
        $this->apiParas["ems_fee"] = $emsFee;
    }

    public function getEmsFee()
    {
        return $this->emsFee;
    }

    public function setExpressFee($expressFee)
    {
        $this->expressFee = $expressFee;
        $this->apiParas["express_fee"] = $expressFee;
    }

    public function getExpressFee()
    {
        return $this->expressFee;
    }

    public function setFreightPayer($freightPayer)
    {
        $this->freightPayer = $freightPayer;
        $this->apiParas["freight_payer"] = $freightPayer;
    }

    public function getFreightPayer()
    {
        return $this->freightPayer;
    }

    public function setHasDiscount($hasDiscount)
    {
        $this->hasDiscount = $hasDiscount;
        $this->apiParas["has_discount"] = $hasDiscount;
    }

    public function getHasDiscount()
    {
        return $this->hasDiscount;
    }

    public function setHasInvoice($hasInvoice)
    {
        $this->hasInvoice = $hasInvoice;
        $this->apiParas["has_invoice"] = $hasInvoice;
    }

    public function getHasInvoice()
    {
        return $this->hasInvoice;
    }

    public function setHasShowcase($hasShowcase)
    {
        $this->hasShowcase = $hasShowcase;
        $this->apiParas["has_showcase"] = $hasShowcase;
    }

    public function getHasShowcase()
    {
        return $this->hasShowcase;
    }

    public function setHasWarranty($hasWarranty)
    {
        $this->hasWarranty = $hasWarranty;
        $this->apiParas["has_warranty"] = $hasWarranty;
    }

    public function getHasWarranty()
    {
        return $this->hasWarranty;
    }

    public function setImage($image)
    {
        $this->image = $image;
        $this->apiParas["image"] = $image;
    }

    public function getImage()
    {
        return $this->image;
    }

    public function setIncrement($increment)
    {
        $this->increment = $increment;
        $this->apiParas["increment"] = $increment;
    }

    public function getIncrement()
    {
        return $this->increment;
    }

    public function setInputPids($inputPids)
    {
        $this->inputPids = $inputPids;
        $this->apiParas["input_pids"] = $inputPids;
    }

    public function getInputPids()
    {
        return $this->inputPids;
    }

    public function setInputStr($inputStr)
    {
        $this->inputStr = $inputStr;
        $this->apiParas["input_str"] = $inputStr;
    }

    public function getInputStr()
    {
        return $this->inputStr;
    }

    public function setIs3D($is3D)
    {
        $this->is3D = $is3D;
        $this->apiParas["is_3D"] = $is3D;
    }

    public function getIs3D()
    {
        return $this->is3D;
    }

    public function setIsEx($isEx)
    {
        $this->isEx = $isEx;
        $this->apiParas["is_ex"] = $isEx;
    }

    public function getIsEx()
    {
        return $this->isEx;
    }

    public function setIsLightningConsignment($isLightningConsignment)
    {
        $this->isLightningConsignment = $isLightningConsignment;
        $this->apiParas["is_lightning_consignment"] = $isLightningConsignment;
    }

    public function getIsLightningConsignment()
    {
        return $this->isLightningConsignment;
    }

    public function setIsReplaceSku($isReplaceSku)
    {
        $this->isReplaceSku = $isReplaceSku;
        $this->apiParas["is_replace_sku"] = $isReplaceSku;
    }

    public function getIsReplaceSku()
    {
        return $this->isReplaceSku;
    }

    public function setIsTaobao($isTaobao)
    {
        $this->isTaobao = $isTaobao;
        $this->apiParas["is_taobao"] = $isTaobao;
    }

    public function getIsTaobao()
    {
        return $this->isTaobao;
    }

    public function setIsXinpin($isXinpin)
    {
        $this->isXinpin = $isXinpin;
        $this->apiParas["is_xinpin"] = $isXinpin;
    }

    public function getIsXinpin()
    {
        return $this->isXinpin;
    }

    public function setLang($lang)
    {
        $this->lang = $lang;
        $this->apiParas["lang"] = $lang;
    }

    public function getLang()
    {
        return $this->lang;
    }

    public function setListTime($listTime)
    {
        $this->listTime = $listTime;
        $this->apiParas["list_time"] = $listTime;
    }

    public function getListTime()
    {
        return $this->listTime;
    }

    public function setLocationCity($locationCity)
    {
        $this->locationCity = $locationCity;
        $this->apiParas["location.city"] = $locationCity;
    }

    public function getLocationCity()
    {
        return $this->locationCity;
    }

    public function setLocationState($locationState)
    {
        $this->locationState = $locationState;
        $this->apiParas["location.state"] = $locationState;
    }

    public function getLocationState()
    {
        return $this->locationState;
    }

    public function setNum($num)
    {
        $this->num = $num;
        $this->apiParas["num"] = $num;
    }

    public function getNum()
    {
        return $this->num;
    }

    public function setNumIid($numIid)
    {
        $this->numIid = $numIid;
        $this->apiParas["num_iid"] = $numIid;
    }

    public function getNumIid()
    {
        return $this->numIid;
    }

    public function setOuterId($outerId)
    {
        $this->outerId = $outerId;
        $this->apiParas["outer_id"] = $outerId;
    }

    public function getOuterId()
    {
        return $this->outerId;
    }

    public function setPicPath($picPath)
    {
        $this->picPath = $picPath;
        $this->apiParas["pic_path"] = $picPath;
    }

    public function getPicPath()
    {
        return $this->picPath;
    }

    public function setPostFee($postFee)
    {
        $this->postFee = $postFee;
        $this->apiParas["post_fee"] = $postFee;
    }

    public function getPostFee()
    {
        return $this->postFee;
    }

    public function setPostageId($postageId)
    {
        $this->postageId = $postageId;
        $this->apiParas["postage_id"] = $postageId;
    }

    public function getPostageId()
    {
        return $this->postageId;
    }

    public function setPrice($price)
    {
        $this->price = $price;
        $this->apiParas["price"] = $price;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function setProductId($productId)
    {
        $this->productId = $productId;
        $this->apiParas["product_id"] = $productId;
    }

    public function getProductId()
    {
        return $this->productId;
    }

    public function setPropertyAlias($propertyAlias)
    {
        $this->propertyAlias = $propertyAlias;
        $this->apiParas["property_alias"] = $propertyAlias;
    }

    public function getPropertyAlias()
    {
        return $this->propertyAlias;
    }

    public function setProps($props)
    {
        $this->props = $props;
        $this->apiParas["props"] = $props;
    }

    public function getProps()
    {
        return $this->props;
    }

    public function setSellPromise($sellPromise)
    {
        $this->sellPromise = $sellPromise;
        $this->apiParas["sell_promise"] = $sellPromise;
    }

    public function getSellPromise()
    {
        return $this->sellPromise;
    }

    public function setSellerCids($sellerCids)
    {
        $this->sellerCids = $sellerCids;
        $this->apiParas["seller_cids"] = $sellerCids;
    }

    public function getSellerCids()
    {
        return $this->sellerCids;
    }

    public function setSkuOuterIds($skuOuterIds)
    {
        $this->skuOuterIds = $skuOuterIds;
        $this->apiParas["sku_outer_ids"] = $skuOuterIds;
    }

    public function getSkuOuterIds()
    {
        return $this->skuOuterIds;
    }

    public function setSkuPrices($skuPrices)
    {
        $this->skuPrices = $skuPrices;
        $this->apiParas["sku_prices"] = $skuPrices;
    }

    public function getSkuPrices()
    {
        return $this->skuPrices;
    }

    public function setSkuProperties($skuProperties)
    {
        $this->skuProperties = $skuProperties;
        $this->apiParas["sku_properties"] = $skuProperties;
    }

    public function getSkuProperties()
    {
        return $this->skuProperties;
    }

    public function setSkuQuantities($skuQuantities)
    {
        $this->skuQuantities = $skuQuantities;
        $this->apiParas["sku_quantities"] = $skuQuantities;
    }

    public function getSkuQuantities()
    {
        return $this->skuQuantities;
    }

    public function setStuffStatus($stuffStatus)
    {
        $this->stuffStatus = $stuffStatus;
        $this->apiParas["stuff_status"] = $stuffStatus;
    }

    public function getStuffStatus()
    {
        return $this->stuffStatus;
    }

    public function setSubStock($subStock)
    {
        $this->subStock = $subStock;
        $this->apiParas["sub_stock"] = $subStock;
    }

    public function getSubStock()
    {
        return $this->subStock;
    }

    public function setTitle($title)
    {
        $this->title = $title;
        $this->apiParas["title"] = $title;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setValidThru($validThru)
    {
        $this->validThru = $validThru;
        $this->apiParas["valid_thru"] = $validThru;
    }

    public function getValidThru()
    {
        return $this->validThru;
    }

    public function setWeight($weight)
    {
        $this->weight = $weight;
        $this->apiParas["weight"] = $weight;
    }

    public function getWeight()
    {
        return $this->weight;
    }

    public function getApiMethodName()
    {
        return "taobao.item.update";
    }
    
    public function getApiParas()
    {
        return $this->apiParas;
    }
    
    public function check()
    {
        
        RequestCheckUtil::checkMinValue($this->cid,0,"cid");
        RequestCheckUtil::checkMaxLength($this->desc,200000,"desc");
        RequestCheckUtil::checkMaxValue($this->num,999999,"num");
        RequestCheckUtil::checkMinValue($this->num,0,"num");
        RequestCheckUtil::checkNotNull($this->numIid,"numIid");
        RequestCheckUtil::checkMinValue($this->numIid,1,"numIid");
        RequestCheckUtil::checkMaxListSize($this->sellerCids,10,"sellerCids");
        RequestCheckUtil::checkMaxLength($this->title,60,"title");
    }
}
